package demo.repository;

import demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 用户 Dao
 *
 * @author 何宇昕
 * @version 1.2
 */
@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    /**
     * 按 uid 搜索员工
     *
     * @param uid uid
     * @return 账号为 uid 的员工
     */
    User findUserByUid(Long uid);

    /**
     * 按员工姓名搜索员工（全匹配）
     *
     * @param name 员工姓名
     * @return 姓名为 name 的所有员工
     */
    List<User> findUsersByUserName(String name);

    /**
     * 按员工身份证号搜索员工（全匹配）
     *
     * @param cardId 员工身份证号
     * @return 身份证号为 cardId 的员工
     */
    User findUserByCardId(String cardId);

    /**
     * 按员工身份证号搜索员工（部分匹配）
     *
     * @param cardId 用户身份证号
     * @return 身份证号为 cardId 的员工
     */
    List<User> findUsersByCardIdContains(String cardId);

    @Deprecated
    @Modifying
    @Query(nativeQuery = true, value = "update user set phone=:_phone,email=:_email where card_id=:_cardid")
    void modifyUser(@Param("_phone") String phone, @Param("_email") String email, @Param("_cardid") String cardId);

    List<User> findByUidNotNull();
}
